/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package olaclient;

import java.io.*;
import java.net.SocketException;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;

/**
 *
 * @author Luuk
 */
public class OLAClient {
    
    private String reference;
    private String bedrag; 
    private String betalingskenmerk;
    private String rekeningnummer; 
    private String geslacht; 
    private String init; 
    private String achternaam;
    private String straatnaam;
    private String straatnummer;
    private String postcode;
    private String plaatsnaam;
    private String rekeningnummernaar;
    private String naamnaar;
            
    public OLAClient(String reference, 
            String bedrag, 
            String betalingskenmerk, 
            String rekeningnummer, 
            String geslacht, 
            String init, 
            String achternaam,
            String straatnaam,
            String straatnummer,
            String postcode,
            String plaatsnaam,
            String rekeningnummernaar,
            String naamnaar){
        this.reference = reference;
        this.bedrag = bedrag;
        this.betalingskenmerk = betalingskenmerk;
        this.rekeningnummer = rekeningnummer;
        this.geslacht = geslacht;
        this.init = init;
        this.achternaam = achternaam;
        this.straatnaam = straatnaam;
        this.straatnummer = straatnummer;
        this.postcode = postcode;
        this.plaatsnaam = plaatsnaam;
        this.rekeningnummernaar = rekeningnummernaar;
        this.naamnaar = naamnaar;
    }
    
    /**
     * Maakt en upload een file aan de hand van de variabelen.
     */
    public void createAndUpload(){
        try {
            FTPClient ftp = new FTPClient();
            ftp.connect("145.33.160.180");
            ftp.login("luuk", "kaasblok");
            ftp.changeWorkingDirectory("\\inbox");
            
            upload(ftp, writeFile(new File(this.reference)));
        } catch (IOException ex) {
            Logger.getLogger(OLAClient.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    /**
     * Upload een file (file f) via de opgegeven ftpclient.
     * @param ftp
     * @param f 
     */
    public void upload(FTPClient ftp, File f){
        InputStream input = null;
        try {
            input = new FileInputStream(f);
            ftp.storeFile(this.reference + ".txt", input);
            input.close();
            f.delete();
        } catch (FileNotFoundException ex) {
            Logger.getLogger(OLAClient.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(OLAClient.class.getName()).log(Level.SEVERE, null, ex);
        }  finally {
            try {
                input.close();
            } catch (IOException ex) {
                Logger.getLogger(OLAClient.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }
    
    /*
     * Write naar een file en return die file ook weer.
     */
    public File writeFile(File f){
        BufferedWriter out = null;
        try {
            out = new BufferedWriter(new FileWriter(f));
            out.write("REFERENCE=" + this.reference);
            out.write("\nBEDRAG=" + this.bedrag);
            out.write("\nBETALINGSKENMERK=" + this.betalingskenmerk);
            out.write("\nREKENINGNUMMER=" + this.rekeningnummer);
            out.write("\nGESLACHT=" + this.geslacht);
            out.write("\nINIT=" + this.init);
            out.write("\nACHTERNAAM=" + this.achternaam);
            out.write("\nSTRAATNAAM=" + this.straatnaam);
            out.write("\nSTRAATNUMMER=" + this.straatnummer);
            out.write("\nPOSTCODE=" + this.postcode);
            out.write("\nPLAATSNAAM=" + this.plaatsnaam);
            out.write("\nREKENINGNUMMERNAAR=" + this.rekeningnummernaar);
            out.write("\nNAAMNAAR=" + this.naamnaar);
            out.close();
        } catch (IOException ex) {
            Logger.getLogger(OLAClient.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            try {
                out.close();
            } catch (IOException ex) {
                Logger.getLogger(OLAClient.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        return f;
    }
    
    /**
     * Main om te testen.
     * @param args
     * @throws Exception 
     */
    public static void main(String[] args) throws Exception{
        try{
            new OLAClient("123", "25,34", "1234123412341234", "123456789", "M", "L.A.", "Blom", "Straat", "25", "9182PE", "Groningen", "987655421", "Herman").createAndUpload();
        }catch(Exception e){
            e.printStackTrace();
            System.out.println(e);
        }
    }
}
